﻿#ifndef CSensorSeriesOper_H
#define CSensorSeriesOper_H
/********************************************************************************
** @ Date:2025/01/06
** @ Author: HanJiaXin
** @ Description:声振温设备操作类
** @ Version:1.0.0
** @ ClassName:
** @ Fun:
********************************************************************************/
#include <QObject>
#include "CDevDataSensorSeries.h"
#include "CIsapiClient.h"

enum ERequestType
{
	enSearchChild,//查询子设备列表
	enSyncHistoryData,//实时查询历史数据
	enSearchHistoryData,//查询历史数据
	enGetSensorCollectDataFile,//获取传感器采集数据文件
	enGetAcceleration,//获取加速度文件
	enGetAudio,//获取音频文件
	enGetHisAcceleration,//获取历史加速度文件
	enGetHisAudio,//获取历史音频文件
};

struct SSensorHisData
{
	QString sGuid;
	QString sDevGuid;
	int nChannelNo;
	QString sChannelName;
	int nDataDirection;
	int nMatchLevel;
	int nResult;
	int nTempResult;
	int nRMSResult;
	int nVoiceResult;
	QString sTime;
	double dTemp;
	double dRMS;
	QString sRMSFileUrl;
	QString sVoiceFileUrl;
};

class CSensorSeriesOper  : public QObject
{
	Q_OBJECT

public:
	CSensorSeriesOper(CDevDataSensorSeries* pDevData);
	~CSensorSeriesOper();

	bool CtrDevice(SCtrInfo& stCtrInfo);

	bool GetDevState();//获取设备状态

	bool GetHistoryData(QString sStartTime,QString sEndTime);//定时获取指定时间段内的数据

private:
	void analySearchChild(SRequestResult stRequestResult);//分析获取设备状态响应字符串
	bool searchHistoryData(SCtrInfo& stCtrInfo);//查询历史数据
	void analyHisAccelerationFile(SRequestResult stRequestResult,QString sPath);//分析历史加速度文件
	void analyHisAudioFile(SRequestResult stRequestResult, QString sPath);//分析历史音频文件
	void analyHistoryData(SRequestResult stRequestResult);
	bool getSensorCollectDataFile(SCtrInfo& stCtrInfo);//查询历史数据
	void analyGetSensorCollectDataFile(SRequestResult stRequestResult);//分析文件
	bool getAccelerationFile(QString sUrl);
	void analyAccelerationFile(SRequestResult stRequestResult);//分析加速度文件
	bool getAudioFile(QString sUrl);//获取音频文件
	void analyAudioFile(SRequestResult stRequestResult);//分析音频文件
	void analySyncHistoryData(SRequestResult stRequestResult);
	void extractJsonFromMultipart(const QByteArray &rawData);//解析算法仓发来的报警请求

	void selectHistoryDataByDB(QMap<QString, QMap<int,QMap<int,SSensorHisData>>>& mapData);//从数据库中获取一天前的数据

signals:
	// 添加内部信号用于线程间通信
	void sigInternalPostRequest(int requestType, const QUrl& url, const QByteArray& postData);
	void sigInternalGetRequest(int requestType, const QUrl& url);
	void sigInternalGetRequestWithParam(int requestType, const QString& param, const QUrl& url);

private slots:
	void slotResult(int nRequestType, SRequestResult stRequestResult);
	void slotResultParame(int nRequestType, QString sParame,SRequestResult stRequestResult);
	void slotNewRequest(QByteArray &requestData);
	// 添加内部槽函数处理网络请求
	void handleInternalPostRequest(int requestType, const QUrl& url, const QByteArray& postData);
	void handleInternalGetRequest(int requestType, const QUrl& url);
	void handleInternalGetRequestWithParam(int requestType, const QString& param, const QUrl& url);

private:
	CDevDataSensorSeries *m_pDevData;
	CIsapiClient* m_pIsapiClient;
	int m_nCtrCmdCurr;                         //当前控制命令
	
};
#endif